package main

import (
	"fmt"
	"strings"
	"unicode"
)

func main() {

	/*
		三. 分割字符串
	*/
	str := "   abc 123 ABC xyz XYZ"
	// 将字符串以空白字符串分割，并返回一个切片
	fmt.Println("---  将字符串以空白字符串分割，并返回一个切片  ---")
	fields := strings.Fields(str)
	fmt.Println(fields)
	// 将字符串以满足f(r) == true 的字符分割，并返回一个切片
	fmt.Println("---  将字符串以满足f(r) == true 的字符分割，并返回一个切片 ---")
	f := func(c rune) bool {
		// 不为字母和数字的字符
		return !unicode.IsLetter(c) && !unicode.IsNumber(c)
	}
	fmt.Println(strings.FieldsFunc("asdff!@@12344我*&……的Go", f))
	// 将字符串s以字符串sep分割，分割后去掉sep
	fmt.Println("---  将字符串s以字符串sep分割，分割后去掉sep  ---")
	fmt.Println(strings.Split("a,b,c,", ","))
	fmt.Println(strings.Split("a,b,c", ""))
	fmt.Println(strings.Split("abc", ""))
	fmt.Println(strings.Split("", ""))
	fmt.Println(strings.Split("", "a"))
	// 将字符串s以字符串sep分割， n 决定返回切片数
	fmt.Println("---  将字符串s以字符串sep分割， n 决定返回切片数  ---")
	fmt.Println(strings.SplitN("a,b,c,", "", 1))
	fmt.Println(strings.SplitN("a,b,c", "", 6))
	fmt.Println(strings.SplitN("a,b,c,", ",", 6))
	fmt.Println(strings.SplitN("a,b,c", "", 1))
	fmt.Println(strings.SplitN("abc", "", 2))
	fmt.Println(strings.SplitN("", "", 1))
	fmt.Println(strings.SplitN("", "a", 2))
	// 将字符串s以字符串sep分割，分割后附上sep
	fmt.Println("---  将字符串s以字符串sep分割，分割后的最后一个字符串附上sep  ---")
	fmt.Println(strings.SplitAfter("a,b,c", ""))
	fmt.Println(strings.SplitAfter("a,b,c,", ","))
	fmt.Println(strings.SplitAfter("a,b,c", "aa"))
	fmt.Println(strings.SplitAfter("", ""))
	fmt.Println(strings.SplitAfter("", "aa"))
	// 将字符串s以字符串sep分割，分割后附上sep， n 决定返回切片数
	fmt.Println("---  将字符串s以字符串sep分割，分割后的最后一个字符串附上sep， n 决定返回切片数  ---")
	fmt.Println(strings.SplitAfterN("a,b,c,", "", 1))
	fmt.Println(strings.SplitAfterN("a,b,c", "", 6))
	fmt.Println(strings.SplitAfterN("a,b,c,", ",", 6))
	fmt.Println(strings.SplitAfterN("a,b,c", "", 1))
	fmt.Println(strings.SplitAfterN("abc", "", 2))
	fmt.Println(strings.SplitAfterN("", "", 1))
	fmt.Println(strings.SplitAfterN("", "a", 2))
}
